Вход

Просмотр полной версии : небольшая проблема с XHR запросом


thunder2
11.07.2009, 22:54
Прошу тапками не кидаться. Я начинающий в этом деле, дается всё с каким-то невероятным трудом. Тут утнулся в проблему. Суть в следующем:
на этом сайте нашел описание что есть XHR запрос, как работает и всё такое. использую код из примеров опубликованных тут же.

выполняю синхронный запрос, в ответ получаю следующий ответ
<html><head>
<meta http-equiv="Content-Type" content="text/xml; charset=windows-1251">
<link href="b2b_ccs.css" rel="stylesheet" type="text/css">
</head><body>
<form id="form1" name="form1" action="" method="post">
<input type="hidden" id="client_id" value="_JK76DGHD">
<input type="hidden" id="errors" value="0">
</form>
</body></html>

в статье сказано чтобы браузер распарсил отет в XML надо в заголовке указать content="text/xml, проверяю свойство xmlHttp.responseXML!=null, условие выполняется, значит браузер ответ распарсил.
Далее в статье сказано что после этого со свойством responseXML можно работать как document, т.е. строка xmlHttp.responseXML.getElementById("errors").value для нашего ответа должно вернуть "0" вместо этого браузер сообщет об ошибке, что данные метод не поддердивается объектом. Вот собственное вопрос: где коряга.
P.S. пробовал делать так var _er=xmlHttp.responseXML.getElementById("errors"), не нравиться именно "getElementById".

Kolyaj
12.07.2009, 16:09
в статье сказано чтобы браузер распарсил отет в XML надо в заголовке указать content="text/xml
Чтобы браузер распарсил XML, ему, как минимум, нужно передать XML, а не HTML.

thunder2
15.07.2009, 11:58
дык я ж в ответ вставил content="text/xml" или что-то имеется ввиду другое ? Может не так надо делать ?

Kolyaj
15.07.2009, 12:06
Вы передаете не XML.

thunder2
15.07.2009, 16:38
хм... понятно. А вот вопрос тогда такой, а XHR вообще html не понимает ? Т.е. что работать с ответом как с куском HTML мне надо формировать ответ в другой форме (например убрать теги html, header, body и оставить тег form) и полученный ответ вставить в документ например document.write или element.innerText=... я правильно понял ?

Kolyaj
15.07.2009, 16:43
Для этого у xhr есть свойство responseText.

thunder2
20.07.2009, 16:12
А не подскажите почему происходит следующее: есть IFRAME следующей записи
<IFRAME id="tree" src="http://localhost....">Ваш браузер не поддреживает IFRAME</IFRAME>
Вот то что src= бла-бла возвращает HTML со структуированым списком. В этой возвращенной html есть ссылка на таблицу связи. Но браузер отображает этот ответ как будто не находит указанный файл с CCS. Пробовал сделать следующее: когда ответ получен просматриваю исходный вид того что во фрейме(в IE есть такое по правой кнопеке мыши), копирую всё это в новый отдельный файл, скажем 1.html и выше указанном фрейме src делаю так src="1.html". Файл 1.html кладу в ту же папку что и отсновную страницу. В этом случае все показывается гуд.
Лечится это только включением в ответ всех используемых таблиц стилей. Как это исправить ?

eee08
03.08.2009, 11:03
Чтобы браузер распарсил XML, ему, как минимум, нужно передать XML, а не HTML.


HTML - подмножество XML так что дело тут в другом.

Как я понимаю responseXML не Null - значит что-то он да содержит. например, имеем:

<tag id="id">текст</tag>

в FF:


responseXML.getElementById("x") = Null
responseXML.getElementById("x").textContent = Неопределено

responseXML.getElementsByTagName("tag")[0] = tag
responseXML.getElementsByTagName("tag")[0].textContent = текст

т.е. может если захочет, а вот IЕ ваще никак.
Может быть кто-то реально в этом разобрался с EI? Поделитесь.

B~Vladi
03.08.2009, 11:18
HTML - подмножество XML так что дело тут в другом.
Не значит, что это одно и то же. Не извесно, как кто будет себя вести в таких ситуациях, так что передавайте xml (<?xml ?>)

eee08
03.08.2009, 11:32
пробовал - то же самое

B~Vladi
03.08.2009, 11:38
Что тоже самое? Не хотите ли вы с казать, что браузер не умеет xml парсить?:D

eee08
03.08.2009, 12:58
Что тоже самое? Не хотите ли вы с казать, что браузер не умеет xml парсить?:D

Как раз наоборот. Я говорю, что все прекрасно работает за исключением getElementById . К сожалению не могу посмотреть в ИЕ, но в ФФ смотрю FireBug'ом результат запроса - .responseXML содержит ответ сервера, но к нужным данным доступ получается чем угодно, только не getElementById

В IE не знаю дебагера нет - просто виснет.

B~Vladi
03.08.2009, 13:21
getElementById
Может это и правильно... ИЕ не воспринимает смысл этого тега, т.к. это xml, а не html... Хотя вроде должен... Можно попробовать через DTD научить его... Хотя не факт, что он xml будет прогонять через dtd.